package cn.gok;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
    测试SpringMVC像前端发送数据：

        前后端分离： 返回JSON
                    （1）、添加json相关依赖
                    （2）、在方法上添加ResponseBody注解， SpringMVC就会自动将返回的数据封装成JSON字符串发送给前端

        前端使用了模板引擎（前后端不分离，后端要操作前端）
                方式1、使用Request、Session，将数据存入作用域中，发送给前端，
                                        前端通过相关表达式（比如EL） 取出作用域中的数据

                方式2、方法返回ModelAndView对象， 由视图解析器去解析，
                            实际上解析器解析完以后，还是把ModelAndView中的数据，存入了Request作用域中


 */
@Controller
public class TestControllerSendData {

    @RequestMapping("sendMsg1")
    public String sendMsg1(HttpServletRequest request){
        request.setAttribute("msg","响应成功");
        request.setAttribute("data","100");
        return "showMsg";
    }


    @RequestMapping("sendMsg2")
    public ModelAndView sendMsg2(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","响应成功");
        modelAndView.addObject("data","1000");
        modelAndView.setViewName("showMsg");

        return modelAndView;
    }

    /**
        如果我们在参数列表中，定义的是 Map，Model，ModelMap
        都表示的是要向前端返回的数据.

        而且我们不管是使用 Model还是 ModelMap实际最终使用的都是 map

        SpringMVC 在响应的时候，会自动将 model中的数据 和 返回视图名结合在一起，
        形成 ModelAndView返回给视图解析器解析
     */
    @RequestMapping("sendMsg3")
    public String sendMsg3(Model model){
        model.addAttribute("msg","响应成功");
        model.addAttribute("data","10000");

        return "showMsg";
    }
    @RequestMapping("sendMsg4")
    public String sendMsg4(ModelMap model){
        model.addAttribute("msg","响应成功");
        model.addAttribute("data","100000");
        return "showMsg";
    }

    @RequestMapping("sendMsg5")
    public String sendMsg5(Map<String,Object> model){
        model.put("msg","响应成功");
        model.put("data","1000000");
        return "showMsg";
    }


}
